﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Configuration;
using System.IO;
using System.Drawing;
using System.Text.RegularExpressions;

namespace IKYSWeb.Siniflar
{
    public enum EnumDosyaTipi
    {
        Personel = 1,                       //Personel Resimleri Klasörü
        AileBirey = 2,                      //Aile Birey Resimleri Klasörü
        AtamaBasvuruFaaliyetRaporlari = 3,  //Atama Nakil Başvurularında Yüklenecek Faaliyet Raporlarının Klasörü
        Duyuru = 4,                         //Duyurunun Dosyaları
        CamiFotograf = 5,                            // cami fotoğraf dosyaları
    }
    [Serializable]
    public class DosyaAraci
    {
        private static string SunucuAdi
        {
            get
            {
                return ConfigurationManager.AppSettings[ConfigurationManager.AppSettings["EndpointType"] + "DosyaSunucusu"];
            }
        }
        private static string DosyaSunucusuPath
        {
            get
            {
                return ConfigurationManager.AppSettings[ConfigurationManager.AppSettings["EndpointType"] + "DosyaSuncusuPath"];
            }
        }
        private static string SunucuWeb
        {
            get
            {
                return ConfigurationManager.AppSettings[ConfigurationManager.AppSettings["EndpointType"] + "DosyaSunucusuWeb"];
            }
        }
        private static string KullaniciAdi
        {
            get
            {
                return ConfigurationManager.AppSettings[ConfigurationManager.AppSettings["EndpointType"] + "DosyaSunucusuUser"];
            }
        }
        private static string Sifre
        {
            get
            {
                return ConfigurationManager.AppSettings[ConfigurationManager.AppSettings["EndpointType"] + "DosyaSunucusuPassword"];
            }
        }

        public static string DosyaUrlGetir(string fileName, EnumDosyaTipi enm)
        {
            if (fileName == "")
                if (enm == EnumDosyaTipi.AileBirey || enm == EnumDosyaTipi.Personel)
                    return "~/App_Themes/Shared/images/ResimYok.gif";
                else if (enm == EnumDosyaTipi.CamiFotograf)
                    return "~/App_Themes/Shared/images/CamiResimYok.jpg";
                else
                    return "";

            return SunucuWeb + "/" + enm.ToString() + "/" + fileName;
        }
        public static bool GecerliBirResimMi(string fileName)
        {
            Regex regex = new Regex(@"(.*?)\.(jpg|JPG|jpeg|JPEG|png|PNG|gif|GIF|bmp|BMP)$");
            return regex.IsMatch(fileName);
        }
        public static bool DosyaYukle(string fileName, byte[] stream, EnumDosyaTipi enm, string AltKlasorAdi = "")
        {
            try
            {
                DosyaErisimAraci d = new DosyaErisimAraci(SunucuAdi, DosyaSunucusuPath + "\\" + enm.ToString() + "\\" + fileName, KullaniciAdi, Sifre);

                if (AltKlasorAdi != "")//Alt Klasör Oluşturulacaksa Klasör adı gönderilecek
                {
                    d.YoksaKlasorOlustur(DosyaSunucusuPath + "\\" + enm.ToString() + "\\" + AltKlasorAdi);

                    d = new DosyaErisimAraci(SunucuAdi, DosyaSunucusuPath + "\\" + enm.ToString() + "\\" + AltKlasorAdi + "\\" + fileName, KullaniciAdi, Sifre);
                }

                if (enm == EnumDosyaTipi.Personel)
                    stream = ResizeImage(stream, 400, true);


                bool sonuc = d.DosyaOlustur(stream);
                d.Dispose();

                return sonuc;
            }
            catch (Exception ex)
            {
                BasePage.EventLogYaz(ex.Message + System.Environment.NewLine + ex.StackTrace);

                return false;
            }
        }

        public static bool DosyaSil(string fileName, EnumDosyaTipi enm, string AltKlasorAdi = "")
        {
            try
            {
                DosyaErisimAraci d = new DosyaErisimAraci(SunucuAdi, DosyaSunucusuPath + "\\" + enm.ToString() + "\\" + fileName, KullaniciAdi, Sifre);

                if (AltKlasorAdi != "")//Alt Klasör Oluşturulacaksa Klasör adı gönderilecek
                {
                    d = new DosyaErisimAraci(SunucuAdi, DosyaSunucusuPath + "\\" + enm.ToString() + "\\" + AltKlasorAdi + "\\" + fileName, KullaniciAdi, Sifre);
                }

                bool sonuc = d.DosyaSil();

                d.Dispose();

                return sonuc;
            }
            catch (Exception exx)
            {
                BasePage.EventLogYaz("Dosyasil Methodunda hata:" + exx.Message, System.Diagnostics.EventLogEntryType.Error);
                return false;
            }
        }

        public static MemoryStream DosyaOku(string fileName, EnumDosyaTipi enm, string AltKlasorAdi = "")
        {
            try
            {
                DosyaErisimAraci d = new DosyaErisimAraci(SunucuAdi, DosyaSunucusuPath + "\\" + enm.ToString() + "\\" + fileName, KullaniciAdi, Sifre);

                if (AltKlasorAdi != "")//Alt Klasör Oluşturulacaksa Klasör adı gönderilecek
                {
                    d = new DosyaErisimAraci(SunucuAdi, DosyaSunucusuPath + "\\" + enm.ToString() + "\\" + AltKlasorAdi + "\\" + fileName, KullaniciAdi, Sifre);
                }

                bool sonuc = d.DosyaOku();

                MemoryStream ms = new MemoryStream();
                if (sonuc)
                    d.FSDosya.CopyTo(ms);
                else
                    ms = null;

                d.Dispose();

                return ms;
            }
            catch (Exception exx)
            {
                BasePage.EventLogYaz("Dosyaoku methodunda hata:" + exx.Message, System.Diagnostics.EventLogEntryType.Error);
                return null;
            }
        }

        public static byte[] ResizeImage(byte[] stream, int newWidth, bool resizeIfWider)
        {
            MemoryStream ms = new MemoryStream(stream);
            Image Image = Image.FromStream(ms);

            if (resizeIfWider)
                if (Image.Width <= newWidth)
                    newWidth = Image.Width;

            int newHeight = Image.Height * newWidth / Image.Width;

            // hesaplanan değerlerle yeni resmi oluştur
            System.Drawing.Image newImage = Image.GetThumbnailImage(newWidth, newHeight, null, IntPtr.Zero);
            ImageConverter ImageConvert = new ImageConverter();

            return (byte[])ImageConvert.ConvertTo(newImage, typeof(byte[]));
        }
    }
}